/********************************************************************
	TABAL ENGINE - 2012/11/08
	author:		Marc Cuscullola
	
	purpose:	Defines an object in a 3D world
*********************************************************************/
#pragma once

#ifndef __UTILITIES__OBJECT_3D__INCLUDED_H__
#define __UTILITIES__OBJECT_3D__INCLUDED_H__

#include "Vector/Vector3.h"
#include "Matrix/Matrix44.h"

class CObject3D
{
public:
	CObject3D(const Vect3f& _position, const Vect3f& _scale, float _fYaw, float _fPitch, float _fRoll = 0.f);
	CObject3D();
	virtual ~CObject3D();

	inline void				AddYaw				(float _fRadians);
	inline void				AddPitch			(float _fRadians);
	inline void				AddRoll				(float _fRadians);

	inline void				SetPosition			(const Vect3f& _position);
	inline void				SetScale			(const Vect3f& _scale);
	inline void				SetYaw				(float _fYaw);
	inline void				SetPitch			(float _fPitch);
	inline void				SetRoll				(float _fRoll);
	inline void				SetVisible			(bool _bVisible);

	inline const Vect3f&	GetPosition			() const;
	inline const Vect3f&	GetScale			() const;
	inline float			GetYaw				() const;
	inline float			GetPitch			() const;
	inline float			GetRoll				() const;
	inline bool				GetVisible			() const;

	const Mat44f			GetTransform		() const;
	const Mat44f			GetRotationMatrix	() const;

protected:
	Vect3f		m_Position;
	Vect3f		m_Scale;
	float		m_fYaw;
	float		m_fPitch;
	float		m_fRoll;
	bool		m_bVisible;
};

#include "Object3D.inl"

#endif __UTILITIES__OBJECT_3D__INCLUDED_H__